package com.itzhoun;

/**
 * @author 周楠
 * @Date 2023/01/21/下午 9:22
 */
public class Client {

    /**
     * 
     *外观模式
     * 定义： 隐藏了系统的复杂性，并向客户端提供了一个可以访问系统的接口
     * 门面角色：
     *  外观模式的核心。它被客户角色调用，它熟悉子系统的功能。内部根据客户角色的需求预定了几种功能的组合。（客户调用，同时自身调用子系统功能）
     * 子系统角色：
     *  实现了子系统的功能。它对客户角色和Facade时未知的。它内部可以有系统内的相互交互，也可以由供外界调用的接口。（实现具体功能）
     * 客户角色：
     *   通过调用Facede来完成要实现的功能（调用门面角色）。
     * 
     */

    public static void main(String[] args) {
        Computer computer = new Computer();
        computer.start();

        System.out.println("======================================");

        computer.shutdown();
    }

    /**
     * 优点：
     * - 松散耦合
     *
     * 　　使得客户端和子系统之间解耦，让子系统内部的模块功能更容易扩展和维护；
     *
     * 　　- 简单易用
     *
     * 　　客户端根本不需要知道子系统内部的实现，或者根本不需要知道子系统内部的构成，它只需要跟Facade类交互即可。
     *
     * 　　- 更好的划分访问层次
     *
     *    　有些方法是对系统外的，有些方法是系统内部相互交互的使用的。子系统把那些暴露给外部的功能集中到门面中，这样就可以实现客户端的使用，很好的隐藏了子系统内部的细节。
     */
}
